<?php
// +----------------------------------------------------------------------
// | sfadmin - Suifeng Administration
// +----------------------------------------------------------------------
// | Copyright (c) 2017~2020 http://suifeng.tech All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: suifeng <1787585212@qq.com>
// +----------------------------------------------------------------------

namespace suifeng\builder\form\validator;

use suifeng\builder\form\Validator;

/**
 * 模型数据唯一。
 *
 */
class Unique extends Validator
{
    /**
     * 错误信息。
     *
     * @var string
     */
    public $message = '{control.label} 不能重复。';

    /**
     * 验证方法。
     */
    protected function _validate_core()
    {
        // 如果没有设置 $model，则检查表单对象的模型对象。
        if (empty($this->control->form->model_object)) {
            return; // 找不到模型对象，就不用检查。
        }

        $model_object = $this->control->form->model_object;
        $key_field = $this->control->form->key_field;
        $key_value = $this->control->form->key_value;

        // 需要确定是create还是modify，两者处理方式有差异。
        $is_create = $key_value ? false : true;

        $value = $this->_get_control_value();

        if ($is_create) {
            $where[$this->control->name] = array('eq', $value);
            $result = $model_object->where($where)->find();
        } else {
            $where[$key_field] = array('neq', $key_value);
            $where[$this->control->name] = array('eq', $value);
            $result = $model_object->where($where)->find();
        }

        // $result不为空，所有数据库存在。
        if ($result) {
            $this->errors[] = $this->_format_message(null, array('value' => $value));
        }
    }
}
